!===================Programa que calcula v(t) com atrito================

PROGRAM exerB

!=======================================================================

IMPLICIT NONE

!========================Declaração de variáveis========================

      INTEGER :: I, n_iter, flag
      REAL(8) :: deltat, vel, b4vel, v0, totalt, tvelterminal
      REAL(8) :: area, dist, med, exata
      !Define como parâmetro a massa do corredor + bicicleta
      !e a potência fornecida pelo corredor
      REAL(8), PARAMETER :: m = 70.0d0, P = 400.0d0, ro = 1.2d0, C = 0.5d0

!===============Abertura de arquivos e leitura de dados=================

      WRITE(*,*) "Entre com a velocidade inicial em m/s"
      READ(*,*) v0
      WRITE(*,*) "Entre com o intervalo de tempo de cada iteração em s"
      READ(*,*) deltat
      WRITE(*,*) "Entre com o tempo total do trajeto em s"
      READ(*,*) totalt
      WRITE(*,*) "Entre com a área da frente do cilcista"
      READ(*,*) area

      OPEN(UNIT=10, FILE="vel2_out.dat", STATUS="unknown")
      OPEN(UNIT=20, FILE="vel_exata.dat", STATUS="unknown")

!==============Calcula as velocidades e imprime no arquivo==============

      flag = 0
      dist = 0.0d0
      vel = 0.0d0
      b4vel = v0
      !Calcula o número total de iterações (arredonda para baixo)
      n_iter = totalt/deltat + 1
      DO I=0,n_iter
            !Calcula os pontos da curva exata
            exata = SQRT(v0**2+(2.0d0*P*I*deltat)/m)
            WRITE(20,*) I*deltat, exata
            !Escreve no arquivo o tempo e a velocidade
            WRITE(10,*) I*deltat, b4vel
            dist = dist + deltat*b4vel
            vel = b4vel+((P*deltat)/(m*b4vel))-((C*ro*area*b4vel**2&
            &*deltat)/m)
            !Checa para ver se já alcançou a velocidade terminal
            IF (b4vel == vel .AND. flag == 0) THEN
                  tvelterminal = I*deltat
                  flag = 1
            END IF
            b4vel = vel
      END DO


!=========================Respostas das perguntas=======================

      !Pergunta 1
      WRITE(*,*) "Para tentar diminuir a sua área de contato com o ",&
      &"ar e assim diminuir a força de arrasto criada (melhor ",&
      &"aerodinâmica). Desse modo ele atinge uma velocidade terminal ",&
      &"maior. ",&
      &"Eles correm em grupo, mas é apenas um deles que ",&
      &"realmente vai tentar ganhar no final. Em grupo eles podem ",&
      &"revezar quem fica na frente e poupar o ciclista principal.",&
      &"É mais vantajoso ficar atrás pois é o corredor da frente que ",&
      &"tem que vencer a resistência do ar, assim o corredor de trás ",&
      &"consegue 'economizar potência'."

      !Pergunta 2
      WRITE(*,*) "A velocidade final atingida é (em m/s):", vel

      !Pergunta 3
      WRITE(*,*) "A velocidade terminal é atingida no instante (em s):",&
      &tvelterminal

      !Pergunta 4
      !Expressão obtida integrando v(t):
      WRITE(*,*) "A distância total percorrida é (em m):", dist

      !Pergunta 5
      !Expressão obtida pela integralde média de uma função 
      med = dist/totalt
      WRITE(*,*) "A velocidade média é (em m/s):", med

!=======================================================================

END PROGRAM exerB

!=======================================================================
